//利用反射机制和prototype实现类的继承
/**
 *
 * 共享prototype来实现类的继承，
 * 不是一种很好的方法，毕竟两个类是共享的一个prototype，
 * 任何对成员的重定义都会互相影响，不是严格意义的继承。
 * @constructor
 */
function Parent(){

}

Parent.prototype = {
    method:function(){
        console.log("Parent method")
    },
    method2:function(){
        console.log("Parent method2");
    },
    arr:[1,2]
}

function Child(){

}


///通过for in迭代 反射 一一对应的进行赋值 ；
//从而实现让Child继承Parent原型上的属性方法；
//为类添加静态方法inherit表示继承于某类
Function.prototype.inherit=function(baseClass){
    for(var p in baseClass.prototype){
        this.prototype[p]=baseClass.prototype[p];
    }
}
//Child 继承 Parent
Child.inherit(Parent)

//覆盖定义Parent中的method方法
Child.prototype.method=function(){
    console.log("Child method")
}

var parent = new Parent()
var child = new Child()
var child2 = new Child()


parent.method() // Parent method
parent.method2() // Parent method2

child.method() // Child method
child.method2() // Parent method2



child.arr.push(3)
console.log(child.arr) // [1,2,3]
console.log(child2.arr) // [1,2,3]
/*
上述，如果 Child.prototype = Parent.prototype;这样做，Child和Parent的prototype 的属性和方法会被完全覆盖掉。
从运行结果可见，child中重复定义的method已经覆盖了继承的method方法，
同时method2方法未受影响。而且parent中的method方法仍然保持了原有的定义。
这样，就实现了正确意义的类的继承。

但这种继承是个浅复制
 */









